package proiect.fis.persistence;

import java.io.Serializable;
import java.util.List;

/**
 * Interfata ajutatoare <br/>
 * Reprezinta modelul metodelor necesare pentru operatiile CRUD
 * @author Boogie
 */
public interface Dao<T, PK extends Serializable> {
    /**
     * Salveaza un obiect in baza de date
     * @param item - obiectul care se va salva
     */
    void save(T item);
    /**
     * Salveaza mai multe obiecte in baza de date
     * @param items - lista de obiecte care se va salva
     */
    void saveAll(List<T> items);
    
    /**
     * Incarca un obiect
     * @param id - id-ul care va fi incarcat
     * @return - obiectul cu id-ul specificat
     */
    T load(PK id);
    /**
     * Incarca toate obiectele din baza de date
     * @return 
     */
    List<T> loadAll();
    /**
     * Reimprospateaza un obiect
     * @param item 
     */
    void refresh(T item);
    /**
     * Salveaza sau actualizează un obiect in baza de date
     * @param item - obiectul salvat/actualizat
     */
    void update(T item);
    /**
     * Salveaza sau actualizează o lista obiecte in baza de date
     * @param items - lista de obiecte care se salveaza
     */
    void updateAll(List<T> items);
    
    /**
     * Elimina un obiect din baza de date si il returneaza
     * @param id-ul obiectului care urmeaza sa fie sters
     * @return - obiectul care se sterge
     */
    T delete(PK id);
    /**
     * Elimina un obiect din baza de date si il returneaza
     * @param item - Obiectul care va fi sters
     * @return - Obiectul care se sterge(echivalent cu paramentrul)
     */
    T delete(T item);
    /**
     * Elimina un set de obiecte din baza de date
     * @param items - obiectele care se vor elimina
     * @return - Lista de obiecte care se sterge(echivalent cu paramentrul)
     */
    List<T> delete(List<T> items);
}
